package com.kungfuhacking.wristbandpro.location.presenter;

import android.graphics.Color;
import android.util.Log;
import android.view.View;

import com.amap.api.location.AMapLocationClient;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.kungfuhacking.wristbandpro.base.presenter.BasePresenter;


/**
 * 定位presenter
 * Created by Aaron on 17/4/13.
 */

public class LocationPresenter implements AMap.InfoWindowAdapter, BasePresenter {

    //定位的图标的和圈的颜色
     static final int STROKE_COLOR = Color.argb(180, 3, 145, 255);
     static final int FILL_COLOR = Color.argb(20, 0, 0, 180);

    AMap aMap;
    //声明AMapLocationClient类对象
    AMapLocationClient mLocationClient = null;
    //声明AMapLocationClientOption对象
//    public AMapLocationClientOption mLocationOption = null;
//    protected boolean isFirstLoc = true;//是否是第一次定位
    private String TAG = getClass().getSimpleName();
    //声明定位回调监听器
//    public AMapLocationListener mLocationListener = null;
//    private AMapLocation mAmapLocation;//定位信息
    Marker mLocMarker;

    public void initMap(final AMap aMap, AMapLocationClient mLocationClient) {

        if (aMap == null || mLocationClient == null)
            return;

        this.mLocationClient = mLocationClient;
        this.aMap = aMap;
        //设置缩放级别
        aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
        aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {

                Log.e(TAG, " +++ onMarkerClick +++ ");
                mLocMarker = marker;
                return false;
            }
        });
        aMap.setOnMapClickListener(new AMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                if (mLocMarker != null && mLocMarker.isInfoWindowShown())
                    mLocMarker.hideInfoWindow();//这个是隐藏infowindow窗口的方法
            }
        });

        //显示比例尺
        aMap.getUiSettings().setScaleControlsEnabled(true);
        aMap.setInfoWindowAdapter(this);
        // 声明定位回调监听器
//        mLocationListener = new AMapLocationListener() {
//            @Override
//            public void onLocationChanged(AMapLocation amapLocation) {
//
//                if (amapLocation != null) {
//                    if (amapLocation.getErrorCode() == 0) {
//                        //可在其中解析amapLocation获取相应内容。
//
//                        LogUtil.e(TAG, "  ====  定位成功  ====  " + amapLocation.getAdCode());
//                        mAmapLocation = amapLocation;
//
//                        if (isFirstLoc) {
//
//                            isFirstLoc = false;
//                            //将地图移动到定位点
//                            aMap.moveCamera(CameraUpdateFactory.changeLatLng(
//                                    new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));
//
//                            aMap.clear();
//                            //添加图钉
//                            aMap.addMarker(getMarkerOptions(amapLocation));
//                        }
//
//                    } else {
//                        //定位失败时，可通过ErrCode（错误码）信息来确定失败的原因，errInfo是错误信息，详见错误码表。
//                        LogUtil.e(TAG, " 定位失败 : getLocationInfo Error, ErrCode:"
//                                + amapLocation.getErrorCode() + ", errInfo:"
//                                + amapLocation.getErrorInfo());
//                    }
//                }
//            }
//        };

//        //初始化定位
//        mLocationClient = new AMapLocationClient(getActivity());
        //设置定位回调监听
//        mLocationClient.setLocationListener(mLocationListener);
        //初始化AMapLocationClientOption对象
//        mLocationOption = new AMapLocationClientOption();
        //设置定位模式为AMapLocationMode.Hight_Accuracy，高精度模式。
//        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//        //设置定位模式为AMapLocationMode.Battery_Saving，低功耗模式。
//        //低功耗定位模式：不会使用GPS和其他传感器，只会使用网络定位（Wi-Fi和基站定位）；
//        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
//        //设置定位模式为AMapLocationMode.Device_Sensors，仅设备模式。
//        //仅用设备定位模式：不需要连接网络，只使用GPS进行定位，这种模式下不支持室内环境的定位，自 v2.9.0 版本支持返回地址描述信息。
//        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);

//        //获取一次定位结果：
//        //该方法默认为false。
//        mLocationOption.setOnceLocation(true);
//        //获取最近3s内精度最高的一次定位结果：
//        //设置setOnceLocationLatest(boolean b)接口为true，启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true，setOnceLocation(boolean b)接口也会被设置为true，反之不会，默认为false。
//        mLocationOption.setOnceLocationLatest(true);

        //SDK默认采用连续定位模式，时间间隔2000ms。如果您需要自定义调用间隔：
        //设置定位间隔,单位毫秒,默认为2000ms，最低1000ms。
//        mLocationOption.setInterval(60000);//一分钟更新一次定位信息
//        //设置是否返回地址信息（默认返回地址信息）
//        mLocationOption.setNeedAddress(true);
        //设置是否强制刷新WIFI，默认为true，强制刷新。设置是否强制刷新WIFI，默认为强制刷新。每次定位主动刷新WIFI模块会提升WIFI定位精度，但相应的会多付出一些电量消耗。
//        mLocationOption.setWifiActiveScan(true);
        //设置是否允许模拟位置,默认为false，不允许模拟位置.设置是否允许模拟软件Mock位置结果，多为模拟GPS定位结果，默认为false，不允许模拟位置。
//        mLocationOption.setMockEnable(false);
        //设置定位请求超时时间，默认为30秒。单位是毫秒，默认30000毫秒，建议超时时间不要低于8000毫秒。
//        mLocationOption.setHttpTimeOut(30000);
        //设置是否开启定位缓存机制 缓存机制默认开启，可以通过以下接口进行关闭。当开启定位缓存功能，在高精度模式和低功耗模式
        // 下进行的网络定位结果均会生成本地缓存，不区分单次定位还是连续定位。GPS定位结果不会被缓存。
        // 关闭缓存机制
//        mLocationOption.setLocationCacheEnable(false);
        //给定位客户端对象设置定位参数
//        mLocationClient.setLocationOption(mLocationOption);
        //启动定位
//        mLocationClient.startLocation();

    }

    @Override
    public View getInfoWindow(Marker marker) {
        return null;
    }

    @Override
    public View getInfoContents(Marker marker) {
        return null;
    }

    @Override
    public void clearRequest() {

    }

//    //自定义一个图钉，并且设置图标，当我们点击图钉时，显示设置的信息
//    private MarkerOptions getMarkerOptions(AMapLocation amapLocation) {
//        //设置图钉选项
//        MarkerOptions options = new MarkerOptions();
//        //图标
////        options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.fire));
//        options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
//        //位置
//        options.position(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude()));
//        StringBuffer buffer = new StringBuffer();
//        buffer.append(amapLocation.getCountry() + "" + amapLocation.getProvince() + "" + amapLocation.getCity() + "" + amapLocation.getDistrict() + "" + amapLocation.getStreet() + "" + amapLocation.getStreetNum());
//        //标题
//        options.title(buffer.toString());
//        //子标题
////        options.snippet("这里好火");
////        //设置多少帧刷新一次图片资源
////        options.period(60);
//
//        return options;
//
//    }

//    public boolean reLocation() {
//        if (aMap != null && mAmapLocation != null) {
//            //将地图移动到定位点
//            aMap.moveCamera(CameraUpdateFactory.changeLatLng(
//                    new LatLng(mAmapLocation.getLatitude(), mAmapLocation.getLongitude())));
//            return true;
//        }
////         showErr("定位失败");
//        return false;
//    }
}
